﻿namespace KinonekoSoftware.Studio.Compatibility
{
    /// <summary>
    /// <see cref="ShenanigansCompatible"/> 类型用于对整活功能进行兼容性检测。
    /// </summary>
    public static class ShenanigansCompatible
    {
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// <para>在过去</para>
        /// </remarks>
        public static async Task IsCompatible(IBusyServiceEX session)
        {
            await CheckShenanigansCharacter(session);
        }


        private static async Task CheckShenanigansCharacter(IBusyService session)
        {
            var repo                         = Platform.GetRepository();
            var hasOldVersionCharacter       = repo.Has(ObsoletedCollectionNames.TalkingDB_Character);
            var hasOldVersionGlobalCharacter = repo.Has(ObsoletedCollectionNames.Global_Character);

            await session.Await(3);

            if (hasOldVersionCharacter)
            {
                var oldVersionCharacterCollection = repo.Get<Character>(ObsoletedCollectionNames.TalkingDB_Character);
                var newVersionCharacterCollection = repo.Get<Character>(CodariaDB.Utils.CollectionNames.CharacterDB);

                //
                //
                await ViewModelBase.Obsoleted("检测到旧版本世界观的数据", "现在将进行数据升级，无需额外操作，仅需等待片刻即可！");

                //
                // 添加到新的集合
                session.Update($"正在升级数据，总计{oldVersionCharacterCollection.Count()}个。");
                await session.Await(2);

                //
                // 添加到新的集合
                newVersionCharacterCollection.Insert(oldVersionCharacterCollection.FindAll());
                oldVersionCharacterCollection.DeleteAll();

                //
                // 删除集合
                session.Update("升级数据成功，正在删除旧的数据.");
                await session.Await(2);

                //
                // 删除集合
                repo.Drop(ObsoletedCollectionNames.TalkingDB_Character);
            }

            if (hasOldVersionGlobalCharacter)
            {
                var oldVersionCharacterCollection = repo.Get<Character>(ObsoletedCollectionNames.Global_Character);
                var newVersionCharacterCollection = repo.Get<Character>(CodariaDB.Utils. CollectionNames.CharacterDB);

                //
                //
                await ViewModelBase.Obsoleted("检测到旧版本世界观的数据", "现在将进行数据升级，无需额外操作，仅需等待片刻即可！");

                //
                // 添加到新的集合
                session.Update($"正在升级数据，总计{oldVersionCharacterCollection.Count()}个。");
                await session.Await(2);

                //
                // 添加到新的集合
                newVersionCharacterCollection.Insert(oldVersionCharacterCollection.FindAll());
                oldVersionCharacterCollection.DeleteAll();

                //
                // 删除集合
                session.Update("升级数据成功，正在删除旧的数据.");
                await session.Await(2);

                //
                // 删除集合
                repo.Drop(ObsoletedCollectionNames.Global_Character);
            }
        }
    }
}